# -*- coding:utf-8 -*-
from flask_wtf import FlaskForm
from wtforms import StringField , PasswordField , BooleanField , SubmitField , TextAreaField
from wtforms.validators import DataRequired , ValidationError , Email ,EqualTo , Length
from app.models import User

class LoginForm (FlaskForm):
	username = StringField('Username' , validators=[DataRequired()])
	password = PasswordField('Password' , validators=[DataRequired()])
	remember_me = BooleanField('Remember Me ')
	submit = SubmitField('Sign In')

class RegistrationForm(FlaskForm):
	username = StringField('Username' , validators = [DataRequired()])
	email = StringField('Email' , validators = [DataRequired() , Email()])
	password = PasswordField('Password' , validators= [ DataRequired() ])
	password2 = PasswordField('Repeat Password' , validators = [ DataRequired() , EqualTo('password')])
	submit = SubmitField('Register')

	def validate_username(self , username):
		user = User.query.filter_by(username = username.data).first()
		if user is not None:
			raise ValidationError('Please use a different username. --Guang Mujun')

	def validate_email(self , email):
		user = User.query.filter_by(email = email.data).first()
		if user is not None:
			raise ValidationError('Please use a different email address. --Guang Mujun')

class EditProfileForm(FlaskForm):
	username = StringField('Username' , validators = [ DataRequired() ] )
	about_me = TextAreaField('About me' , validators = [ Length(min=0 , max=140) ] )
	submit = SubmitField('Submit')

	def __init__(self , original_username , *args , **kwargs):#输入用户名与原用户名相同的情况
		super(EditProfileForm , self).__init__(*args , **kwargs)
		self.original_username = original_username

	def validate_username(self , username):#输入的用户名在数据库中已经存在时
		if username.data != self.original_username:
			user = User.query.filter_by(username = self.username.data).first()
			if user is not None:
				raise ValidationError('Please user a different username! ---- Guang Mujun')

class PostForm(FlaskForm):
	post = TextAreaField('Say Something:' , validators = [DataRequired() , Length(min = 1 ,max =140)])
	submit = SubmitField('Submit')

class ResetPasswordRequestForm(FlaskForm):
	email = StringField('Email' , validators = [DataRequired() , Email()])
	submit = SubmitField('Request Password Request')

class ResetPasswordForm(FlaskForm):
	password = PasswordField('Password' , validators = [DataRequired()])
	password2 = PasswordField('Repeat Password' , validators = [DataRequired()])
	submit = SubmitField('Request Password Reset')	